<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //构造函数实现面向对象的写法
    //class实现面向对象的写法
    //构造函数 或 class 的写法 目的是为了完成已有代码的封装（面向对象程序是第一特性）
    //继承（面向对象的第二特性）


    //实现继承的方法一 ：构造函数+call
    // function Father (){
    //     this.height = 100
    //     this.color = 'yellow'
    //     this.money = 99999999999
    // this.run = function () {
    //     console.log('aaa');
    // }
    // }
    // function Son(){
    //     //构造函数继承（构造函数+call）
    //     Father.call(this)
    // }
    // var s = new Son();
    // s.run()//s.run()之所以能调用成功，是因为Son这个构造函数继承了Father这个构造函数的所有属性和方法


    // 实现继承的方法二：原型链继承
    // function Father() {
    //     this.height = 100
    //     this.color = 'yellow'
    //     this.money = 99999999999
    //     this.run = function () {
    //         console.log('aaa');
    //     }
    // }
    // function Son() { }
    // //通过更改Son的原型对象，更改为Father的实例对象，实现了通过原型链继承Father属性
    // Son.prototype = new Father()
    // var s = new Son();
    // s.run()


    //实现继承的方法三：同时使用构造函数继承和原型链继承
    // function Father() {
    //     this.height = 100
    //     this.color = 'yellow'
    //     this.money = 99999999999
    //     this.run = function () {
    //         console.log('aaa');
    //     }
    // }


    // function Son() { 
    //     Father.call(this) //构造函数继承（构造函数+call）
    // }
    // //将方法保存在原型对象身上，使用Son构造函数创建的所有实例对象，都可以访问到该方法，但是这方法只保存了一份（在原型对象身上）
    // Son.prototype = new Father()

    // var s = new Son();
    // var s1 = new Son()
    // s.run()
    // s1.run()



    //实现继承方法四：class继承，通过extends关键词实现继承
    class Father {
        constructor() {
            this.height = 100
            this.color = 'yellow'
            this.money = 99999999999
        }
    }
    this.run = function () {
        console.log('aaa');
    }

    class Son extends Father {

    }
    var s = new Son();
    console.log(s);
</script>